package com.sylar.happyreader;

import java.io.File;
import java.util.ArrayList;

import android.app.Activity;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

import com.sylar.happyreader.adapter.FileListAdapter;
import com.sylar.happyreader.bean.FileItem;

public class LocalBookActivity extends Activity implements OnClickListener {

	private TextView tvTitle;
	private Button btnBack, btnHome;
	private ListView lvFiles;
	private File current_dir;
	private ArrayList<FileItem> fileItems;
	private FileListAdapter fileListAdapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.filelist);

		btnBack = (Button) findViewById(R.id.back);
		btnHome = (Button) findViewById(R.id.home);

		btnBack.setOnClickListener(this);
		btnHome.setOnClickListener(this);

		tvTitle = (TextView) findViewById(R.id.tvTitle);
		lvFiles = (ListView) findViewById(android.R.id.list);
		browseTo(new File("/mnt/sdcard"));
		fileListAdapter = new FileListAdapter(this, fileItems);
		lvFiles.setAdapter(fileListAdapter);
		lvFiles.setOnItemClickListener(new OnItemClickListener() {

			public void onItemClick(AdapterView<?> adapterView, View view, int position, long arg3) {
				// 获取被单击的item的对象
				FileItem fi = (FileItem) fileListAdapter.getItem(position);
				String fileName = fi.getFileName();
				File file = new File(current_dir, fileName);
				if (isValidFileOrDir(file)) {
					// TODO
				} else {
					browseTo(new File(current_dir, fi.getFileName()));
				}
			}

		});
	}

	// 浏览指定目录
	private void browseTo(File dir) {
		// 如果dir对象是一个目录
		if (dir.isDirectory()) {
			// 改变标题栏的标题
			tvTitle.setText(dir.getAbsolutePath());
			// 更改当前目录为指定目录
			this.current_dir = dir;
			// 查找dir目录中的所有子目录和文件 填充到items集合
			fill(current_dir.listFiles());
		}
	}

	private void fill(File[] files) {
		// 如果items未初始化则初始化
		if (fileItems == null) {
			fileItems = new ArrayList<FileItem>();
		}
		// 清空items中所存储的原目录信息
		fileItems.clear();
		Resources res = getResources();

		if (files != null) {
			// 遍历当前目录中的所有文件和子目录
			for (File file : files) {
				// 获取文件名
				String fileName = file.getName();
				// 获取文件或目录的图标
				Drawable icon = null;
				// 如果是目录，则图标为folder
				if (file.isDirectory()) {
					icon = res.getDrawable(R.drawable.folder);
				} else {
					// 如果测试为音频文件，设置图标
					if (checkEnd(fileName, res.getStringArray(R.array.audioFile))) {
						icon = res.getDrawable(R.drawable.audio);
					}
					// 如果测试为图片文件，设置图标
					else if (checkEnd(fileName, res.getStringArray(R.array.imageFile))) {
						icon = res.getDrawable(R.drawable.image);
					} else if (checkEnd(fileName, res.getStringArray(R.array.packageFile))) {
						icon = res.getDrawable(R.drawable.packed);
					} else if (checkEnd(fileName, res.getStringArray(R.array.webFile))) {
						icon = res.getDrawable(R.drawable.webtext);
					} else {
						icon = res.getDrawable(R.drawable.text);
					}
				}
				// 创建fileitem对象，并添加到集合
				FileItem item = new FileItem(fileName, icon);
				fileItems.add(item);
			}
		}
		// 如果adapter不为null 则通知更新界面
		if (fileListAdapter != null)
			fileListAdapter.dataChanged(fileItems);
	}

	// 检查指定文件名 是否以数组中指定的扩展名结尾
	private boolean checkEnd(String fileName, String[] endType) {
		if (fileName != null && endType != null) {
			for (String end : endType) {
				if (fileName.endsWith(end))
					return true;
			}
		}

		return false;
	}

	/* 检查是否为合法的文件名，或者是否为路径 */
	private boolean isValidFileOrDir(File file) {
		if (file.isDirectory()) {
			return false;
		} else {
			String fileName = file.getName().toLowerCase();
			if (fileName.endsWith(".txt")) {
				return true;
			}
		}
		return false;
	}

	// 浏览根目录
	private void browseRoot() {
		browseTo(new File("/mnt/sdcard"));
	}

	// 浏览上级目录
	private void browseUpLevel() {
		if (current_dir != null && current_dir.getParent() != null) {
			browseTo(current_dir.getParentFile());
		}
	}

	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.back:
			browseUpLevel();
			break;

		case R.id.home:
			browseRoot();
			break;
		}
	}

}
